package org.szy.plugin.sys.service;

import com.mybatisflex.core.query.QueryWrapper;
import org.szy.core.common.param.CommonMoveParam;
import org.szy.core.common.param.CommonStatusParam;
import org.szy.core.common.service.BaseService;
import org.szy.plugin.sys.entity.SysOrg;
import org.szy.plugin.sys.param.SysOrgQueryParam;
import org.szy.plugin.sys.pojo.SysOrgTree;

import java.util.List;

/**
 * 系统组织Service接口
 *
 * @author wangbuhao
 * @since 2023-06-18 17:12:42
 **/
public interface SysOrgService extends BaseService<SysOrg> {

    /**
     * 获取系统组织查询Wrapper
     *
     * @author wangbuhao
     * @since 2023-06-18 17:12:42
     */
    QueryWrapper qwByQuery(SysOrgQueryParam param);

    /**
     * 获取系统组织列表
     *
     * @param param 查询参数
     * @return 系统组织列表
     */
    List<SysOrg> list(SysOrgQueryParam param);


    /**
     * 添加系统组织
     *
     * @author wangbuhao
     * @date 2023/02/15 11:22
     */
    boolean add(SysOrg entity);

    /**
     * 编辑系统组织
     *
     * @author wangbuhao
     * @date 2023/02/15 11:22
     */
    boolean edit(SysOrg entity);

    /**
     * 删除系统组织
     *
     * @author wangbuhao
     * @date 2023/02/15 11:22
     */
    boolean deleteById(Long id);

    /**
     * 构建组织树形结构
     *
     * @param list 组织列表
     * @return 树形结构列表
     */
    List<SysOrgTree> buildTrees(List<SysOrg> list);

    /**
     * 移动组织位置
     *
     * @param param 移动参数
     */
    boolean move(CommonMoveParam param);

    /**
     * 移动组织位置
     *
     * @param param 移动参数
     * @return 移动结果
     */
    boolean modifyStatus(CommonStatusParam param);

    /**
     * 组织主键列表根据父主键
     *
     * @param pid 父主键
     * @return 组织主键列表
     */
    List<String> listIdByPid(String pid);

}
